/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.unmsm.fisi.ceiecbt.app.servlets;

import java.io.*;
import java.net.*;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.servlet.*;
import javax.servlet.http.*;
import net.sf.jasperreports.engine.JRException;
import pe.edu.unmsm.fisi.ceiecbt.app.clases.ReporteNatural;
import pe.edu.unmsm.fisi.ceiecbt.app.utiles.Reporter;
import pe.edu.unmsm.fisi.ceiecbt.ejb.beans.ComtbUsuarioFacadeRemote;
import pe.edu.unmsm.fisi.ceiecbt.ejb.beans.ComtbInversionFacadeRemote;
import pe.edu.unmsm.fisi.ceiecbt.ejb.beans.ComtbDetalleInversionFacadeRemote;
import pe.edu.unmsm.fisi.ceiecbt.ejb.beans.ComtbPatrocinadorFacadeRemote;


import pe.edu.unmsm.fisi.ceiecbt.ejb.entidad.ComtbDetalleInversion;
import pe.edu.unmsm.fisi.ceiecbt.ejb.entidad.ComtbUsuario;
import pe.edu.unmsm.fisi.ceiecbt.ejb.entidad.ComtbInversion;
import pe.edu.unmsm.fisi.ceiecbt.ejb.entidad.ComtbPatrocinador; 

/**
 *
 * @author Davis
 */
public class RegistrarPatrocinador extends HttpServlet {
   @EJB
      private ComtbUsuarioFacadeRemote combtemp;
      private ComtbUsuario datosUsuario;
     @EJB
      private ComtbPatrocinadorFacadeRemote guardarPatrocinador;
     
     @EJB
      private ComtbInversionFacadeRemote guardarInversion;
       @EJB
      private ComtbDetalleInversionFacadeRemote guardarDetalleinversion;
      
      
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       request.setAttribute("pagina", "");
       
        HttpSession sesion_act=request.getSession(true);
        if(sesion_act.getAttribute("user")!= null){
            String usuario = (String)sesion_act.getAttribute("user");
              
            //Obtenemos los datos del usuario par registrar patrocicion            
             datosUsuario= combtemp.datosUser(usuario);
            System.out.println("usuario datos :"+datosUsuario.getUsuarvApellidos()+" "+datosUsuario.getUsuarvNombres()+" "+datosUsuario.getTipodvCodTipo().getTipodvCodTipo()+" "+datosUsuario.getUsuarvCorreo());
            sesion_act.setAttribute("datosUsuario", datosUsuario);
            
            pe.edu.unmsm.fisi.ceiecbt.app.utiles.redireccion.muestraJSP(request, response, "Registro/registrarPatrocinador.jsp");
        }else{
            pe.edu.unmsm.fisi.ceiecbt.app.utiles.redireccion.muestraJSP(request, response, "error/error.jsp");
        }
       
    } 

   
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        request.setAttribute("pagina", "");
       
        HttpSession sesion_act=request.getSession(true);
        if(datosUsuario!= null){
            Date fecha_hoy = new Date();
            //Registramos al patrocinador 
            ComtbPatrocinador registroPatrocinador =  new ComtbPatrocinador();
            String codigoPatrocinador="";
           registroPatrocinador.setPatroCodusuario(datosUsuario);
           // if( guardarPatrocinador.find(registroPatrocinador) == null){
                if(guardarPatrocinador.getLastCode().size()>0){
                    String ultimCodPatro = (String) guardarPatrocinador.getLastCode().get(0).getPatrovCodPatrocinador();
                    int lastCodigoUser = codigo(ultimCodPatro);
                    lastCodigoUser++;
                    codigoPatrocinador="P"+nuevoCod(lastCodigoUser);
                }else{
                    codigoPatrocinador="P00001";
                }

                //List<ComtbPatrocinador> todos = (List) guardarPatrocinador.findAll();
                //int ultimo =todos.size()-1;
                //String ultimCodPatro = (String)todos.get(ultimo).getPatrovCodPatrocinador();


                registroPatrocinador.setPatrovCodPatrocinador(codigoPatrocinador);
                registroPatrocinador.setPatrodFecReg(formatearFecha(fecha_hoy));
                registroPatrocinador.setPatroiFlagPub(1);
                registroPatrocinador.setPatronTelefono(request.getParameter("telefono"));
                registroPatrocinador.setPatrovApmat(datosUsuario.getUsuarvApellidos());
                registroPatrocinador.setPatrovAppat(datosUsuario.getUsuarvApellidos());
                registroPatrocinador.setPatrovCargo("");

                registroPatrocinador.setPatrovDireccion(request.getParameter("direccion")+" "+request.getParameter("distrito")+" "+request.getParameter("ciudad")+" "+request.getParameter("pais"));
                registroPatrocinador.setPatrovNombres(datosUsuario.getUsuarvNombres());
                registroPatrocinador.setPatrovNumerodocu(datosUsuario.getUsuarvNumDocu());                    
                registroPatrocinador.setPatrovRazonsocial("No Especificado");
                registroPatrocinador.setPatrovTipodoc(datosUsuario.getTipodvCodTipo());
                registroPatrocinador.setPatroCodusuario(datosUsuario);
                guardarPatrocinador.create(registroPatrocinador);
            //}
            ArrayList<ReporteNatural> arrayReporte = new ArrayList<ReporteNatural>();
            ArrayList<ComtbDetalleInversion> listaInversion = (ArrayList)sesion_act.getAttribute("listaInvertir");
            for(int i=0;i<listaInversion.size();i++){
               
                
                
                 ComtbInversion inversion = new ComtbInversion();
                 int codigoultimo=0;
                if(i==0){
                    
                   
                    if(guardarInversion.getLastCode() != null && guardarInversion.getLastCode().size()>0 ){
                        String ultimoCodSolicitud = (String)guardarInversion.getLastCode().get(0).getInvervCodSolicitud();
                        codigoultimo= Integer.parseInt(ultimoCodSolicitud);
                    }else{
                        codigoultimo=Integer.parseInt(formatearFechaCodigo(fecha_hoy)+i);
                    }
                    
                }
                 codigoultimo++;
                 ComtbDetalleInversion temporal = (ComtbDetalleInversion)listaInversion.get(i);
                 //Se guarda la cabecera de la inversion
                 inversion.setInveriEstado(1);
                 inversion.setInvervCodSolicitud(""+codigoultimo);
                 inversion.setInvervFechaInversion(formatearFecha(fecha_hoy));
                 inversion.setInvervMetodoPago("No Especificado");
                 inversion.setPatrovCodPatrocinador(registroPatrocinador);
                
                 guardarInversion.create(inversion);
                 
                 //Se guarda el detalle de la inversion
                 ComtbDetalleInversion detalleInversion = new ComtbDetalleInversion();
                 detalleInversion.setDetinviCod(Integer.parseInt(inversion.getInvervCodSolicitud()));
                 detalleInversion.setDetinviPerfil(temporal.getDetinviPerfil());
                 detalleInversion.setDetinviTipoInv(temporal.getDetinviTipoInv());               
                
                 detalleInversion.setDetinvrMonto(temporal.getDetinvrMonto());
                 detalleInversion.setEmprevCodEmpresa(temporal.getEmprevCodEmpresa());
                 detalleInversion.setInvervCodSolicitud(inversion);
                 guardarDetalleinversion.create(detalleInversion);
                 System.out.println("Se realizo con exito la solicitud de patrocinio numero = "+i);
                 
                 
                 
                 
                  ReporteNatural reporteBean = new ReporteNatural();
                
                reporteBean.setStrL_Email(datosUsuario.getUsuarvCorreo());
                reporteBean.setStrL_EmpresaPatro(detalleInversion.getEmprevCodEmpresa().getEmprevDescripcion());
                reporteBean.setStrL_Inversion(""+detalleInversion.getDetinvrMonto());
                reporteBean.setStrL_Nombres(datosUsuario.getUsuarvNombres());
                reporteBean.setStrL_NumeroDocu(datosUsuario.getUsuarvNumDocu());
                reporteBean.setStrL_PerfilPatro(detalleInversion.getDetinviPerfil()+"");
                reporteBean.setStrL_ResponsableEmpre(detalleInversion.getEmprevCodEmpresa().getEmprevResponsable());
                reporteBean.setStrL_TelefonoContacto(detalleInversion.getEmprevCodEmpresa().getEmprevTelefono());
                reporteBean.setStrL_TipoPatro(detalleInversion.getDetinviTipoInv()+"");
                reporteBean.setStrL_apellidos(datosUsuario.getUsuarvApellidos());
                reporteBean.setStrL_celular(request.getParameter("celular"));
                reporteBean.setStrL_ciudad(request.getParameter("ciudad"));
                reporteBean.setStrL_direccion(request.getParameter("direccion"));
                reporteBean.setStrL_documento(datosUsuario.getTipodvCodTipo().getTipodvDescripcion());
                reporteBean.setStrL_distrito(request.getParameter("distrito"));
                reporteBean.setStrL_pais(request.getParameter("pais"));
                reporteBean.setStrL_telefono(registroPatrocinador.getPatronTelefono());
                arrayReporte.add(reporteBean);
                 //pe.edu.unmsm.fisi.ceiecbt.app.utiles.redireccion.muestraJSP(request, response, );
            }
            
            
            
            
            try {
            //processRequest(request, response);
            
           // for(int i=0;i<2;i++){
                
               
            //}
            
            File f = File.createTempFile("SolicitudPatrocinio", ".pdf");
            Reporter objL_reporter = new Reporter();
            objL_reporter.exportReport(request.getSession().getServletContext().getRealPath("/reporte/ContratoPatrocinio.jasper"), null, arrayReporte, f);
            Runtime.getRuntime().exec(new String[]{"rundll32", "url.dll,FileProtocolHandler", f.getAbsolutePath()});
          
             sesion_act.setAttribute("solicitudRegistrada","bien");
            
        } catch (JRException ex) {
            Logger.getLogger(Reporte.class.getName()).log(Level.SEVERE, null, ex);
        }  
            
            
            
            pe.edu.unmsm.fisi.ceiecbt.app.utiles.redireccion.muestraJSP(request, response, "Inicio");
    
        }else{
            pe.edu.unmsm.fisi.ceiecbt.app.utiles.redireccion.muestraJSP(request, response, "error/error.jsp");
        }
        
        
        
        
    }

    /** 
    * Returns a short description of the servlet.
    */
    public int codigo (String codigo){
        int codsolo=0;
        codsolo = Integer.parseInt(codigo.substring(1, 6));
        return codsolo;
    }
    public String formatearFecha(Date fecha){
        String strL_fechaFormateada;
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        strL_fechaFormateada=formato.format(fecha);
        return strL_fechaFormateada;
    }
    public String formatearFechaCodigo(Date fecha){
        String strL_fechaFormateada;
        SimpleDateFormat formato = new SimpleDateFormat("ddMMyyyy");
        strL_fechaFormateada=formato.format(fecha);
        return strL_fechaFormateada;
    }
    
    
     public String nuevoCod(int cod){
        
        String cd=""+cod;
        
        
        if(cd.length()>0){
            if(cd.length()>1){
                if(cd.length()>2){
                    if(cd.length()>3){                        
                        if(cd.length()>4){      
                            if(cd.length()==5){
                                cd="0"+cd;
                            }
                        }else{
                            cd="00"+cd;
                        }    
                    }
                }else{
                     cd="000"+cd;
                }
                
            }else{
                 cd="0000"+cd;
            }           
            
        }else{
            cd="00000"+cd;
        }
            
        
        return cd;
    }
    
    
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
